package loger

import (
	"fmt"
	"time"
)

// SyncStats 同步统计信息
type SyncStats struct {
	// 同步开始时间
	StartTime time.Time
	// 同步结束时间
	EndTime time.Time
	// 总计数
	Total int
	// 成功计数
	Success int
	// 失败计数
	Failed int
	// 新增计数
	Added int
	// 修改计数
	Modified int
	// 删除计数
	Deleted int
	// 错误信息列表
	Errors []string
}

// NewSyncStats 创建新的同步统计实例
func NewSyncStats() *SyncStats {
	return &SyncStats{
		StartTime: time.Now(),
		Errors:    make([]string, 0),
	}
}

// AddError 添加错误信息
func (s *SyncStats) AddError(err string) {
	s.Failed++
	s.Errors = append(s.Errors, err)
}

// AddSuccess 添加成功计数
func (s *SyncStats) AddSuccess() {
	s.Success++
}

// IncrTotal 增加总计数
func (s *SyncStats) IncrTotal() {
	s.Total++
}

// IncrAdded 增加新增计数
func (s *SyncStats) IncrAdded() {
	s.Added++
}

// IncrModified 增加修改计数
func (s *SyncStats) IncrModified() {
	s.Modified++
}

// IncrDeleted 增加删除计数
func (s *SyncStats) IncrDeleted() {
	s.Deleted++
}

// Summary 生成统计摘要
func (s *SyncStats) Summary(name string) string {
	s.EndTime = time.Now()
	duration := s.EndTime.Sub(s.StartTime)

	summary := fmt.Sprintf(`
============= %s同步摘要 =============
同步开始时间: %s
同步结束时间: %s
同步总耗时: %s

统计信息:
- 总数: %d
- 成功: %d
- 失败: %d
- 新增: %d
- 修改: %d
- 删除: %d

详细错误信息:
%s
=================================
`,
		name,
		s.StartTime.Format("2006-01-02 15:04:05"),
		s.EndTime.Format("2006-01-02 15:04:05"),
		duration.String(),
		s.Total,
		s.Success,
		s.Failed,
		s.Added,
		s.Modified,
		s.Deleted,
		s.formatErrors(),
	)

	return summary
}

// formatErrors 格式化错误信息列表
func (s *SyncStats) formatErrors() string {
	if len(s.Errors) == 0 {
		return "无错误"
	}

	result := ""
	for _, err := range s.Errors {
		result += fmt.Sprintf("- %s\n", err)
	}
	return result
}
